home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #288 (1993)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #288 (1993)(Rhein-Sieg-Soft).adf
/
Knobeln
/
GEISTERSTUNDE.LST
< prev
next >
Wrap
File List
|
1992-10-29
|
12KB
|
416 lines
' ******************************
' * Geisterstunde V1.01 *
' * (The Witching Hour) *
' * © 1992 by Henry König *
' * Bornheide 71, 2 Hamburg 53 *
' ******************************
init.spiel ! Variablen zuweisen, Spielfeld zeichnen
spielen ! und spielen
PROCEDURE anweisung.aus ! Anweisungen ausblenden
PRINT AT(1,23);SPACE$(30);
PRINT AT(1,25);SPACE$(30);
RETURN
PROCEDURE beenden ! Spiel beenden
anweisung.aus ! letzte Anweisung löschen
LOCATE 1,23 ! Cursor plazieren
IF spieler=1 THEN ! Spieler = 1
PRINT "Die Hexen gewinnen"; ! ja, der Spieler gewinnt
ELSE ! Spieler 0 -1
PRINT "Die Geister gewinnen"! Computer gewinnt
ENDIF
PRINT AT(1,25);"Noch ein Spiel? (j/n) ";
taste ! auf Taste warten
IF UPPER$(x$)="J" THEN
RUN ! ja, dann Neustart
ELSE
CLOSEW #2 ! Fenster schließen
CLOSES 2 ! Bildschirm schließen
END ! zurück zur Workbench
ENDIF
RETURN
PROCEDURE bildschirm ! Bildschirm und Fenster öffnen
breite%=320 ! Fensterbreite
hoehe%=256 ! Fensterhöhe
ebenen%=3 ! Anzahl der Bitplanes
OPENS 1,0,0,breite%,hoehe%,ebenen%,&H0
OPENW #1,0,0,breite%,hoehe%,&H18,&H1800,1
TITLEW #1,"Geisterstunde"
farben.setzen ! Farbpalette setzen
RETURN
PROCEDURE computer.zieht ! Computer zieht für sich oder Spieler
RANDOMIZE TIMER ! Zufallsgenerator einschalten
CLR h
CLR k
FOR a=7 TO 35
sechs
NEXT a
dreio:
leave
IF h<0 THEN
quarterc
ELSE
CLR h
CLR k
a=t
sechs
IF h<1 THEN
quarterc
ELSE
GOTO dreio
ENDIF
ENDIF
RETURN
PROCEDURE farben.setzen ! Farbfestlegung
SETCOLOR 0,5,5,5 ! grau statt blau
SETCOLOR 1,15,15,15 ! weiß bleibt
SETCOLOR 2,0,0,0 ! schwarz erhalten
SETCOLOR 3,15,5,0 ! rot bleibt
SETCOLOR 4,10,10,10 ! hellgrau inverse Farbe im Filerequester
SETCOLOR 5,15,15,0 ! gelb
SETCOLOR 6,0,0,0 ! schwarz = Inverse Farbe im Filerequester
SETCOLOR 7,15,12,10 ! orange
RETURN
PROCEDURE figur.plazieren ! Figur neu setzen
IF b(a)<>2 THEN
IF b(a)<0 THEN ! Hexe anzeigen
PUT x(a),y(a),hexe$
ENDIF
IF b(a)=0 THEN ! Figur ausblenden
PUT x(a),y(a),feld$
ENDIF
IF b(a)>0 THEN ! Geist anzeigen
PUT x(a),y(a),geist$
ENDIF
LOCATE xl(a),yl(a) ! Position der Feldbezeichnungen
PCOLOR 7
PRINT CHR$(l(a)) ! Feldbezeichnung ausgeben
PCOLOR 1
ENDIF
RETURN
PROCEDURE init.spiel ! Variablenzuweisung, Spielfeld zeichnen
bildschirm ! Bildschirm öffnen
DIM d(28),x(35),y(35)
DIM l(35),xl(35),yl(35),n(28),b(42)
DIM m(10)
COLOR 1
BOX 50,80,81,103 ! Box zeichnen
GET 50,80,81,103,feld$ ! leeres Feld zum Ausblenden merken
BOX 230,80,261,103 ! Box für den Geist zeichnen
PRINT AT(14,12);"Geisterstunde"
zeichne.figur ! Hexe und Geist zeichnen
spieler=-1 ! Hexen (Spieler) fangen an
FOR a=0 TO 7
READ m(a)
NEXT a
FOR a=0 TO 28
READ d(a)
NEXT a
b=48 ! 1. linker Rahmen der Spielfiguren
c=32
d=59
e=12 ! Rahmenhöhe
FOR a=0 TO 4
FOR f=0 TO 4
h=6*a+f+7
x(h)=b*f+d-15 ! Positionen der Figuren
y(h)=c*a+e+5
l(h)=g+97
n(g)=h
g=g+1
xl(h)=6*f+10 ! Rechtswert der Feldbezeichnungen
yl(h)=4*a+3 ! Hochwert der Feldbezeichnungen
NEXT f
NEXT a
CLS ! Bildschirm löschen
COLOR 3 !
FOR a=0 TO 4 ! waagerechte und senkrechte Verbindung zeichnen
LINE d,c*a+e+16,b*4+d,c*a+e+16
LINE b*a+d,e+16,b*a+d,c*4+e+16
NEXT a
CLR a
CLR f
zeichne.linie ! Schräglinien zeichnen
a=b+b
zeichne.linie
f=c+c
zeichne.linie
CLR a
zeichne.linie
FOR a=0 TO 42
READ b(a)
figur.plazieren ! Figuren aufs Spielfeld setzen
NEXT a
RETURN
PROCEDURE leave ! Figur auf Spielfeld setzen
b(t)=b(f)
b(f)=0
a=f
figur.plazieren ! Figur auf Spielfeld setzen
IF k THEN
b(k)=0
a=k
figur.plazieren ! Figur auf Spielfeld setzen
ENDIF
a=t
figur.plazieren ! Figur auf Spielfeld setzen
RETURN
PROCEDURE leave2
IF b(c+m(b))=0 THEN
sc=1+RND(1)*0.9
IF h<sc THEN
h=sc
f=a
t=c+m(b)
k=c
ENDIF
IF ck<>0 THEN
IF t1=c+m(b) THEN
l=1
k1=c
b=7
ENDIF
ENDIF
ENDIF
RETURN
PROCEDURE quarterc
spieler=-spieler ! Spieler invertieren
CLR h
a=7
zweisixo:
IF a=36 THEN
beenden ! Spiel beenden
ENDIF
sechs
IF h=0 THEN
INC a
GOTO zweisixo
ENDIF
RETURN
PROCEDURE sechs
IF b(a)=0 OR b(a)=-spieler OR b(a)=2 THEN
GOTO sechs.ende
ENDIF
FOR b=0 TO d(a-7)
c=a+m(b)
IF b(c)=spieler OR b(c)=2 THEN
GOTO sechs.weiter
ENDIF
IF b(c) THEN
leave2
GOTO sechs.weiter
ENDIF
sc=RND(1)*0.9
IF h<sc THEN
h=sc
f=a
t=c
ENDIF
IF ck=1 AND t1=c THEN
l=1
b=7
ENDIF
sechs.weiter:
NEXT b
sechs.ende:
RETURN
PROCEDURE spielen ! Spielprozedur
spielen1:
d=0 ! Flag nur ein Zug
PCOLOR 5,0
PRINT AT(1,1);"Geisterstunde V1.00 © 1992 by H. König"
PCOLOR 1,0
LINE 1,10,639,10 ! rote Linie zeichen
LINE 1,172,639,172 ! rote Linie zeichen
LINE 1,210,639,210 ! rote Linie zeichen
LOCATE 1,23
IF spieler=1 THEN ! Geister ziehen
PRINT "Geister ziehen"
ELSE ! Hexen ziehen (-1)
PRINT "Du ziehst die Hexe"
ENDIF
IF spieler=1 THEN ! Geister sind dran
anweisung.aus ! Anweisung ausblenden
PRINT AT(1,25);"Geister ziehen."
computer.zieht ! Computer zieht
anweisung.aus ! Anweisung ausblenden
GOTO spielen1 ! und weiterspielen
ELSE ! Hexen sind dran
PRINT AT(1,28);"Bei RETURN zieht der Computer für Dich."
PRINT AT(19,25);"nach Feld:";
PRINT AT(20,23);"von Feld:";
CLR x% ! Eingabe löschen
WHILE x%=0
e=e+1
taste ! ein Zeichen von der Tastatur holen
IF ASC(x$)=13 THEN ! RETURN?
anweisung.aus ! ja, dann Anweisung ausblenden
computer.zieht ! Computer zieht
GOTO spielen1 ! und weiterspielen
ENDIF
IF x%<97 OR x%>121 THEN ! Eingabe a-y?
CLR x% ! nein, dann Eingabe löschen
ENDIF
WEND
PRINT x$
a=n(x%-97)
z=a
ENDIF
waehle.zielfeld: ! Spieler muß Zielfeld wählen
PRINT AT(19,25);"nach Feld:"; ! Anzeige
CLR x% ! Eingabe löschen
WHILE x%=0 !
taste ! ein Zeichen von der Tastatur holen
IF x%<97 OR x%>121 THEN ! Eingabe a-y?
CLR x% ! nein, dann Eingabe löschen
ENDIF
WEND
PRINT x$;
t1=n(x%-97)
ck=1
CLR l
CLR k1
sechs
ck=0
CLR h
a=7
IF a<36 THEN
dm2:
sechs
IF h<1 THEN
INC a
IF a<36 THEN
GOTO dm2
ENDIF
ENDIF
ENDIF
IF d THEN
GOTO fourseveno
ENDIF
IF l THEN
GOTO foureighto
ENDIF
tone:
PRINT CHR$(7); ! Blitz bei falschen Zug
GOTO spielen1 ! nächster Zug
fourseveno:
IF l=0 OR k1=0 THEN
PRINT CHR$(7); ! Blitz bei falschen Zug
GOTO fiveone
ENDIF
foureighto:
IF k1=0 AND h>=1 THEN
GOTO tone
ENDIF
f=z
t=t1
k=k1
leave
IF k1=0 THEN
quarterc
GOTO spielen.ende
ENDIF
a=t
z=a
CLR h
sechs
IF h<1 THEN
quarterc
GOTO spielen.ende
ENDIF
fiveone:
anweisung.aus ! Anweisungen löschen
d=1 ! Flag noch ein Zug möglich
GOTO waehle.zielfeld
spielen.ende:
GOTO spielen1 ! nächsten Zug
RETURN
PROCEDURE taste ! auf Tastendruck warten
CLR x% ! Eingangswert für die Schleife
CLR mausk% ! Mausknopf löschen
CLR mausx% ! Maus (rechts) löschen
CLR mausy% ! Maus (hoch) löschen
WHILE x%=0
x$=INKEY$ ! Taste abfragen
IF x$<>"" THEN ! Taste gedrückt?
x%=ASC(x$) ! ja, dann ASCII-Zeichen merken
ENDIF
WEND
RETURN
PROCEDURE zeichne.figur ! Hexe und Geist zeichnen
FOR y=82 TO 101 ! Hochwerte
FOR x=58 TO 73 ! Rechtswerte
READ farbe ! DATA lesen
IF farbe<>50 THEN ! <>?
COLOR farbe ! ja, dann Farbe einschalten
PLOT x,y ! Punkt setzen
ENDIF
NEXT x
NEXT y
GET 50,80,81,103,hexe$ ! Hexe speichern
FOR y=82 TO 100 ! Hochwerte
FOR x=238 TO 251 ! Rechtswerte
READ farbe ! DATA lesen
IF farbe<>50 THEN ! <>
COLOR farbe ! ja, dann Farbe einschalten
PLOT x,y ! Punkt zeichnen
ENDIF
NEXT x
NEXT y
GET 230,80,261,103,geist$ ! Geist merken
RETURN
PROCEDURE zeichne.linie ! Schräglinien zeichnen
LINE d+a,e+f+16,2*b+d+a,2*c+e+f+16
LINE d+a,2*c+e+f+16,2*b+d+a,e+f+16
RETURN
PROCEDURE daten
' Daten der Hexe
DATA 50,50,02,50,50,50,50,50,50,50,50,50,50,50,50,50
DATA 50,02,02,02,50,50,50,50,50,50,50,50,50,50,50,50
DATA 50,02,02,02,02,02,50,50,50,50,50,50,50,50,50,50
DATA 02,50,02,02,02,02,02,02,02,02,50,50,50,50,50,50
DATA 50,50,02,02,05,05,05,05,05,50,02,02,02,50,50,50
DATA 50,02,50,07,07,07,05,05,05,05,50,50,50,50,50,50
DATA 02,50,07,50,07,07,02,02,05,05,50,50,50,50,50,50
DATA 50,50,50,50,07,50,02,02,02,02,02,02,50,50,50,50
DATA 50,50,50,07,50,50,02,02,00,02,02,02,02,50,50,50
DATA 50,50,07,07,02,02,02,02,00,02,02,02,02,50,50,50
DATA 50,50,07,07,02,02,02,02,00,02,02,02,02,50,50,50
DATA 50,50,50,50,02,02,02,02,00,02,02,02,50,50,50,50
DATA 50,50,50,50,50,00,00,00,02,02,02,02,50,50,50,50
DATA 50,50,50,50,50,02,02,00,02,02,00,02,50,50,50,50
DATA 50,50,50,50,50,02,02,00,02,02,00,02,02,50,50,50
DATA 50,50,50,50,50,00,00,00,00,00,00,02,02,02,50,50
DATA 50,50,50,50,50,50,00,00,00,00,00,00,00,00,50,50
DATA 50,50,50,50,50,50,00,00,00,00,00,00,00,00,00,50
DATA 50,50,50,50,50,50,05,05,50,00,00,00,00,00,00,00
DATA 50,50,50,50,50,05,05,05,50,50,05,05,05,50,50,50
' Daten des Geistes
DATA 50,50,50,50,50,50,01,01,50,01,01,50,50,50
DATA 50,50,50,50,50,50,50,01,01,01,01,01,50,50
DATA 50,50,01,01,01,50,50,01,01,01,01,01,01,50
DATA 50,50,01,01,02,01,50,01,01,01,01,01,01,50
DATA 50,50,01,02,01,01,01,01,01,01,01,50,01,50
DATA 50,50,01,01,01,02,01,01,01,01,01,01,50,50
DATA 50,50,50,50,01,01,01,01,01,01,01,01,50,50
DATA 50,01,50,01,01,01,01,01,01,01,50,01,50,50
DATA 50,01,01,01,01,01,01,01,01,01,01,50,50,50
DATA 01,01,01,01,01,01,01,01,01,01,01,01,01,50
DATA 50,01,01,01,01,50,50,01,01,01,00,01,01,50
DATA 50,01,01,01,01,50,50,01,01,01,00,01,01,50
DATA 50,50,01,01,50,50,01,01,01,00,01,00,01,50
DATA 50,50,01,01,50,01,01,00,01,00,01,01,00,50
DATA 50,50,01,50,50,01,01,00,01,00,01,01,50,50
DATA 50,50,50,50,01,01,00,01,01,00,01,01,50,50
DATA 50,50,50,01,01,00,01,01,01,00,01,01,01,50
DATA 50,50,50,01,01,50,01,01,01,00,01,01,01,01
DATA 50,50,50,50,50,50,01,01,01,50,50,01,01,01
' Kontroldaten
DATA -6,1,6,-1,-5,7,5,-7
DATA 7,3,7,3,7,0,3,7,3,7,3,0
DATA 7,3,7,3,7,0,3,7,3,7,3,0,7,3,7,3,7
DATA 2,2,2,2,2,2,2,-1,-1,-1,-1,-1,2
DATA -1,-1,-1,-1,-1,2,-1,-1,0,1,1,2
DATA 1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,2,2,2
RETURN
REM